<script>
  // 小程序订阅消息 (用户通过弹窗订阅) 开发指南

      /*
         一、使用说明

                1、步骤一：获取模板ID

                      在微信公众平台手动配置获取模板 ID：

                        登录https://mp.weixin.qq.com/wxamp/newtmpl/mytmpl?token=822390655&lang=zh_CN获取模板，如果没有合适的模板，可以申请添加新模板，审核通过后可使用。

                        示例图片：

                            https://res.wx.qq.com/wxdoc/dist/assets/img/subscribe-message.b562750a.jpg


                2、步骤二：获取下发权限

                       一次性订阅消息、长期订阅消息，详见服务端接口 sendMessage（服务端接口） 

                       次数限制：开通支付能力的小程序下发上限是3kw/日，没开通的是1kw/日

                       设备订阅消息，详见服务端接口 hardwareDevice.send

      */
       
      /*
          二、注意事项

                  用户勾选 “总是保持以上选择，不再询问” 之后，下次订阅调用 wx.requestSubscribeMessage 不会弹窗，保
                  
                  持之前的选择，修改选择需要打开小程序设置进行修改。
      */

      /*
          三、"订阅事件(订阅、取消订阅、下发消息结果)"推送
          
                (用户出发订阅事件，然后微信服务器将订阅事件推送给开发者服务器)


                1、 当用户触发订阅消息弹框后，用户的相关行为事件结果会 "推送" 至开发者所配置的服务器地址 或 微信云托管服务。

                                    <1>、XML格式示例：

                                            <xml>
                                                <ToUserName><![CDATA[gh_123456789abc]]></ToUserName>
                                                <FromUserName><![CDATA[otFpruAK8D-E6EfStSYonYSBZ8_4]]></FromUserName>
                                                <CreateTime>1610969440</CreateTime>
                                                <MsgType><![CDATA[event]]></MsgType>
                                                <Event><![CDATA[subscribe_msg_popup_event]]></Event>
                                                <SubscribeMsgPopupEvent>
                                                    <List>
                                                        <TemplateId><![CDATA[VRR0UEO9VJOLs0MHlU0OilqX6MVFDwH3_3gz3Oc0NIc]]></TemplateId>
                                                        <SubscribeStatusString><![CDATA[accept]]></SubscribeStatusString>
                                                        <PopupScene>2</PopupScene>
                                                    </List>
                                                    <List>
                                                        <TemplateId><![CDATA[9nLIlbOQZC5Y89AZteFEux3WCXRRRG5Wfzkpssu4bLI]]></TemplateId>
                                                        <SubscribeStatusString><![CDATA[reject]]></SubscribeStatusString>
                                                        <PopupScene>2</PopupScene>
                                                    </List>
                                                </SubscribeMsgPopupEvent>
                                            </xml>

                                    <2>、JSON格式示例

                                              {
                                                "ToUserName": "gh_123456789abc",
                                                "FromUserName": "o7esq5OI1Uej6Xixw1lA2H7XDVbc",
                                                "CreateTime": "1620973045",
                                                "MsgType": "event",
                                                "Event": "subscribe_msg_popup_event",
                                                "List": [   {
                                                      "TemplateId": "hD-ixGOhYmUfjOnI8MCzQMPshzGVeux_2vzyvQu7O68",
                                                      "SubscribeStatusString": "accept",
                                                      "PopupScene": "0"
                                                  }],
                                              }

                                        若 "List" 只有一个对象，则只返回对象本身；若 "List" 多于一个对象，则返回一个包含所有对象的数组。     

                                    <3>、参数说明

                                                  参数	                          说明

                                            ①、ToUserName                        小程序账号ID

                                            ②、FromUserName                      用户openid 

                                            ③、CreateTime                        事件推送时间戳

                                            ④、TemplateId                        模板id（一次订阅可能有多个id）

                                            ⑤、SubscribeStatusString             订阅结果 (accept接收； reject拒收)、

                                            ⑥、PopupScene                        弹框场景，0代表在小程序页面内


              2、当用户在手机端 "服务通知" 中的消息卡片的右上角 "..."管理消息时，"相应的行为事件" 会推送至开发者所配置的 "服务器地址" 或 "微信云托管服务"。
                     （目前只推送取消订阅的事件，即对消息设置 "拒收"）

                                   <1>、XML格式示例：

                                             <xml>
                                                <ToUserName><![CDATA[gh_123456789abc]]></ToUserName>
                                                <FromUserName><![CDATA[otFpruAK8D-E6EfStSYonYSBZ8_4]]></FromUserName>
                                                <CreateTime>1610969440</CreateTime>
                                                <MsgType><![CDATA[event]]></MsgType>
                                                <Event><![CDATA[subscribe_msg_change_event]]></Event>
                                                <SubscribeMsgChangeEvent>
                                                    <List>          <TemplateId><![CDATA[VRR0UEO9VJOLs0MHlU0OilqX6MVFDwH3_3gz3Oc0NIc]]></TemplateId>
                                                        <SubscribeStatusString><![CDATA[reject]]></SubscribeStatusString>
                                                    </List>
                                                </SubscribeMsgChangeEvent>
                                            </xml>

                                   <2>、JSON 格式示例：

                                            {
                                                  "ToUserName": "gh_123456789abc",
                                                  "FromUserName": "o7esq5OI1Uej6Xixw1lA2H7XDVbc",
                                                  "CreateTime": "1610968440",
                                                  "MsgType": "event",
                                                  "Event": "subscribe_msg_change_event",
                                                  "List": [  {
                                                            "TemplateId":"BEwX0BOT3MqK3Uc5oTU3CGBqzjpndk2jzUf7VfExd8",
                                                            "SubscribeStatusString": "reject"
                                                  }],
                                            }
                                            
                                            ★、若 "List"只有一个对象，则只返回对象本身；若 "List" 多于一个对象，则返回一个包含所有对象的数组。

                                  <3>、参数说明

                                                  参数	                      说明

                                              ①、ToUserName	              小程序账号ID

                                              ②、FromUserName	            用户openid

                                              ③、CreateTime	              时间戳

                                              ④、TemplateId	              模板id（一次订阅可能有多个id）
                                              
                                              ⑤、SubscribeStatusString	  订阅结果（reject拒收）


              3、调用订阅消息接口发送给用户的最终结构，会推送下发结果事件至开发者所配置的服务器地址 或 微信云托管服务。


                                  <1>、XML 格式示例：

                                            <xml>
                                                <ToUserName><![CDATA[gh_123456789abc]]></ToUserName>
                                                <FromUserName><![CDATA[otFpruAK8D-E6EfStSYonYSBZ8_4]]></FromUserName>
                                                <CreateTime>1610969468</CreateTime>
                                                <MsgType><![CDATA[event]]></MsgType>
                                                <Event><![CDATA[subscribe_msg_sent_event]]></Event>
                                                <SubscribeMsgSentEvent>
                                                    <List>       <TemplateId><![CDATA[VRR0UEO9VJOLs0MHlU0OilqX6MVFDwH3_3gz3Oc0NIc]]></TemplateId>
                                                        <MsgID>1700827132819554304</MsgID>
                                                        <ErrorCode>0</ErrorCode>
                                                        <ErrorStatus><![CDATA[success]]></ErrorStatus>
                                                    </List>
                                                </SubscribeMsgSentEvent>
                                            </xml>


                                  <2>、Json格式示例：

                                            {
                                                "ToUserName": "gh_123456789abc",
                                                "FromUserName": "o7esq5PHRGBQYmeNyfG064wEFVpQ",
                                                "CreateTime": "1620963428",
                                                "MsgType": "event",
                                                "Event": "subscribe_msg_sent_event",
                                                "List": {
                                                    "TemplateId": "BEwX0BO-T3MqK3Uc5oTU3CGBqzjpndk2jzUf7VfExd8",
                                                    "MsgID": "1864323726461255680",
                                                    "ErrorCode": "0",
                                                    "ErrorStatus": "success"
                                                  }
                                                  
                                            }
                                          
                                 <3>、参数说明

                                                          参数	                        说明

                                                    ①、ToUserName	                  小程序账号ID

                                                    ②、FromUserName	                用户openid

                                                    ③、CreateTime	                  时间戳

                                                    ④、TemplateId	                  模板id（一次订阅可能有多个id）

                                                    ⑤、MsgID	                      消息id（调用接口时也会返回）

                                                    ⑥、ErrorCode	                  推送结果状态码（0表示成功）
                                                    
                                                    ⑦、ErrorStatus	                推送结果状态码对应的含义


                                                ★、注意：

                                                        失败仅包含因异步推送导致的系统失败。
      */
</script>